#ifndef EMBEDDEDINPUT_H
#define EMBEDDEDINPUT_H

#include <QObject>
#include <QSocketNotifier>
#include <QTimer>

#ifdef Q_OS_LINUX
#include <linux/input.h>
#endif

namespace ns_yht {

/**
 * @brief 嵌入式系统按键输入处理类
 * 
 * 该类用于处理嵌入式系统上的物理按键输入，支持以下方式：
 * 1. GPIO按键输入
 * 2. Linux input子系统设备
 * 3. 串口按键设备
 * 
 * 使用示例：
 * @code
 * EmbeddedInput *input = new EmbeddedInput(this);
 * // 监听input设备（如/dev/input/event0）
 * input->addInputDevice("/dev/input/event0");
 * 
 * // 连接按键信号
 * connect(input, &EmbeddedInput::keyPressed, [](int keycode) {
 *     switch(keycode) {
 *     case KEY_POWER:
 *         // 处理电源键
 *         break;
 *     case KEY_VOLUMEUP:
 *         // 处理音量加键
 *         break;
 *     }
 * });
 * @endcode
 */
class EmbeddedInput : public QObject
{
    Q_OBJECT

public:
    explicit EmbeddedInput(QObject *parent = nullptr);
    ~EmbeddedInput();

    /**
     * @brief 添加Linux input设备（如/dev/input/eventX）
     * @param devicePath 设备路径
     * @return 是否添加成功
     */
    bool addInputDevice(const QString &devicePath);

signals:
    /**
     * @brief 按键按下信号
     * @param keycode 按键码
     */
    void keyPressed(int keycode);
    
    /**
     * @brief 按键释放信号
     * @param keycode 按键码
     */
    void keyReleased(int keycode);

private slots:
    void handleInputEvent(int socket);

private:
    struct InputDevice {
        int fd;
        QSocketNotifier *notifier;
    };
    
    QList<InputDevice> m_inputDevices;
};

} // namespace ns_yht

#endif // EMBEDDEDINPUT_H